const path = require('path')
// 路径处理函数
function resolve (dir) {
  return path.join(__dirname, dir)
}
// 判断是否为生成环境
const isProd = process.env.NODE_ENV === 'production'
const isDev = process.env.NODE_ENV === 'development'

// vue-element-admin 中原来主要是进行 prefetch/preload 提高页面打开速度 需要的自行自行配置！
// 参考：https://blog.csdn.net/weixin_39963287/article/details/111944448

// 体积分析插件
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer')

let plugins = [] // webapck的插件
let cdn = { css: [], js: [] } // cdn资源
let externals = {} // 排除项
if (isProd) {
  plugins = [new BundleAnalyzerPlugin({ analyzerPort: 9999 })]
  cdn = {
    css: [
      'https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.css',
      'https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.3/theme-chalk/index.css'
    ],
    js: [
      'https://cdn.bootcdn.net/ajax/libs/vue/2.6.11/vue.min.js',
      'https://cdn.bootcdn.net/ajax/libs/vue-router/3.2.0/vue-router.js',
      'https://cdn.bootcdn.net/ajax/libs/vuex/3.5.1/vuex.min.js',
      'https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js',
      'https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.js',
      'https://cdn.bootcdn.net/ajax/libs/screenfull.js/5.1.0/screenfull.min.js',
      'https://cdn.bootcdn.net/ajax/libs/vue-i18n/8.25.0/vue-i18n.min.js',
      'https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.3/index.min.js',
      'https://cdn.bootcdn.net/ajax/libs/xlsx/0.17.0/xlsx.min.js',
      'https://cdn.bootcdn.net/ajax/libs/echarts/5.1.2/echarts.common.js'
    ]
  }
  externals = {
    // 键 是 包名
    // 值 是 全局引入的cdn资源暴露在window中变量名称，这个一定要注意，确保正确，否则会因为找不到而使得项目无法打包
    vue: 'Vue',
    'element-ui': 'ELEMENT',
    'vue-router': 'VueRouter',
    axios: 'axios',
    vuex: 'Vuex',
    nprogress: 'NProgress',
    'vue-i18n': 'VueI18n',
    screenfull: 'screenfull',
    xlsx: 'XLSX'
  }
} else {
  cdn = { css: [], js: [] }
  externals = {}
}

module.exports = {
  // 打包文件引用关系
  publicPath: isProd ? './' : '/',
  // 输出目录
  outputDir: 'dist',
  // 静态文件存放目录
  assetsDir: 'static',
  // 是否保存的时候校验
  lintOnSave: isDev,
  // 是否关闭打包后的map文件
  productionSourceMap: false,
  // 服务器配置
  devServer: {
    port: 8889,
    open: true,
    overlay: {
      warnings: false,
      errors: true
    }
  },
  // 设置webpack的相关配置信息 【对象式配置】
  configureWebpack: {
    plugins: plugins, // 配置webpack的插件
    externals: externals // 排除编译项
  },
  // 设置webpack的相关配置信息 【函数式配置】
  chainWebpack (config) {
    // 设置 svg-sprite-loader
    config.module
      .rule('svg')
      .exclude.add(resolve('src/icons'))
      .end()
    config.module
      .rule('icons')
      .test(/\.svg$/)
      .include.add(resolve('src/icons'))
      .end()
      .use('svg-sprite-loader')
      .loader('svg-sprite-loader')
      .options({
        symbolId: 'icon-[name]'
      })
      .end()
    // 配置 webpack-plugin-html 插件中的内容。 args[0] 表示配置信息，增加cdn变量
    config.plugin('html').tap(args => {
      args[0].cdn = cdn
      return args // 需要return
    })
  }
}
